/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package classes;

import javax.swing.JOptionPane;

/**
 * Classe que corresponde a tela de login do sistema, usando interface grafica.
 * @author equipe
 */
public class TelaDeLogin extends javax.swing.JFrame {
    
  
	private static final long serialVersionUID = 1L;
	private String txtLogin;
    private char[] txtSenha;
    private javax.swing.JButton botaoEntrar;
    private javax.swing.JTextField campoLogin;
    private javax.swing.JPasswordField campoSenha;
    private javax.swing.JLabel jLabel1;
    private javax.swing.JLabel jLabel2;
    private javax.swing.JMenu jMenu1;
    private javax.swing.JMenuBar jMenuBar1;
    private javax.swing.JMenuItem menuCriarUsuario;
  
    /**
     * Cria uma tela de login.
     */
    public TelaDeLogin() {
        initComponents();
    }
    

    /**
     * Componentes que compoe a tela de login e seus campos, onde o usuario digita seus dados.
     */
    private void initComponents() {

        jLabel1 = new javax.swing.JLabel();
        campoLogin = new javax.swing.JTextField();
        jLabel2 = new javax.swing.JLabel();
        campoSenha = new javax.swing.JPasswordField();
        botaoEntrar = new javax.swing.JButton();
        jMenuBar1 = new javax.swing.JMenuBar();
        jMenu1 = new javax.swing.JMenu();
        menuCriarUsuario = new javax.swing.JMenuItem();

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setTitle("Login - Biblioteca");
        setResizable(false);

        jLabel1.setText("Login");

        campoLogin.addFocusListener(new java.awt.event.FocusAdapter() {
        	/**
        	 * Evento acionado pela iniciativa do usuario de deixar o campo login pronto para uso.
        	 */
            public void focusLost(java.awt.event.FocusEvent evt) {
                campoLoginFocusLost(evt);
            }
        });

        jLabel2.setText("Senha");

        campoSenha.addFocusListener(new java.awt.event.FocusAdapter() {
        	/**
        	 * Evento acionado pela iniciativa do usuario de deixar o campo senha pronto para uso.
        	 */
            public void focusLost(java.awt.event.FocusEvent evt) {
                campoSenhaFocusLost(evt);
            }
        });

        botaoEntrar.setText("Login");
        botaoEntrar.addActionListener(new java.awt.event.ActionListener() {
        	/**
        	 * Metodo que faz ativar os botoes
        	 */
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                botaoEntrarActionPerformed(evt);
            }
        });

        jMenu1.setText("Menu");

        menuCriarUsuario.setText("Criar usuario");
        menuCriarUsuario.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                menuCriarUsuarioActionPerformed(evt);
            }
        });
        jMenu1.add(menuCriarUsuario);

        jMenuBar1.add(jMenu1);

        setJMenuBar(jMenuBar1);

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(44, 44, 44)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addComponent(jLabel2)
                            .addComponent(jLabel1))
                        .addGap(18, 18, 18)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(campoLogin, javax.swing.GroupLayout.PREFERRED_SIZE, 163, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addComponent(campoSenha, javax.swing.GroupLayout.PREFERRED_SIZE, 163, javax.swing.GroupLayout.PREFERRED_SIZE)))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(151, 151, 151)
                        .addComponent(botaoEntrar)))
                .addContainerGap(101, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGap(28, 28, 28)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel1)
                    .addComponent(campoLogin, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(jLabel2)
                    .addComponent(campoSenha, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18, 18, 18)
                .addComponent(botaoEntrar)
                .addContainerGap(37, Short.MAX_VALUE))
        );
        pack();
        dispose();
    }
    
    /**
     * Metodo que integra a tela de cadastro com a tela de login.
     * @param evt
     * 		Parametro que serve de controle para manusear os metodos da biblioteca.
     */
    private void menuCriarUsuarioActionPerformed(java.awt.event.ActionEvent evt) {
        // TODO add your handling code here:
    	Biblioteca.telaDeCadastro = new TelaCadastro();
    	Biblioteca.telaDeCadastro.setLocationRelativeTo(null);
    	Biblioteca.telaDeCadastro.setVisible(true);
    	Biblioteca.telaDeLogin.dispose();
    	
    	
    }
    
    /**
     * Configura o que o usuario digitou para o campo login.
     * @param evt
     * 		Parametro a ser configurado para o campo login.
     */
    private void campoLoginFocusLost(java.awt.event.FocusEvent evt) {
        // TODO add your handling code here:
        txtLogin = campoLogin.getText();
        
    }

	/**
     * Configura o que o usuario digitou para o campo senha.
     * @param evt
     * 		Parametro a ser configurado para o campo senha.
     */
    private void campoSenhaFocusLost(java.awt.event.FocusEvent evt) {
        // TODO add your handling code here:
        txtSenha = campoSenha.getPassword();
    }
    
    /**
     * Quando o usuario digita a senha, essa senha fica como um array do tipo char.
     * Esse metodo transforma a senha em uma String.
     * @param array
     * 		Array que vem do usuario.
     * @return
     * 		Retorna a senha em forma de String.
     */
    private String transformaSenha(char[] array){
    	String senha = "";
    	for (char c : array) {
			senha += c;
		}
    	return senha;
    }

    /**
     * Evento acionado pela iniciativa do usuario de deixar o campo entrar pronto para uso.
     * 
     * @param evt
     * 		Variavel para manipular metodos da biblioteca.
     */
    private void botaoEntrarActionPerformed(java.awt.event.ActionEvent evt) {
    	if (txtLogin.length() > 0 && txtSenha.length > 0) {
        	Professor professor = Login.autentica(txtLogin, transformaSenha(txtSenha));
        	if (professor != null) {
        		Biblioteca.telaDeLogin.dispose();
        		professor.telaDeUsuario.setLocationRelativeTo(null);
    			professor.telaDeUsuario.setVisible(true);
    		}
        	else {
    			JOptionPane.showMessageDialog(null, "Usuario/senha invalidos");
    			campoLogin.setText("");
    			campoSenha.setText("");
    		}
		}
    	else {
			JOptionPane.showMessageDialog(null, "Digite seu login e senha");
		}
    }

}
